﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.DirectoryServices;


namespace Sinacor.Tools.Web.ConstantesErro
{
    public partial class frmLogin : BasePage
    {
        protected override void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnAutenticar_Click(object sender, EventArgs e)
        {
            try
            {
                if (!this.usuarioAutenticado(string.Empty, this.txtUsuario.Text.Trim(), this.txtSenha.Text.Trim()))
                {
                    if (!this.usuarioAutenticado(ConfigurationManager.AppSettings["DOMINIOPADRAO"], this.txtUsuario.Text.Trim(), this.txtSenha.Text.Trim()))
                    {
                        if (!this.usuarioAutenticado(ConfigurationManager.AppSettings["DOMINIOPADRAOALTERNATIVO"], this.txtUsuario.Text.Trim(), this.txtSenha.Text.Trim()))
                        {
                            throw new Exception(string.Format("Não foi possível autenticar o usuário nos domínios [{0}] ou [{1}]!",ConfigurationManager.AppSettings["DOMINIOPADRAO"],ConfigurationManager.AppSettings["DOMINIOPADRAOALTERNATIVO"]));
                        }
                    }
                }
                Session["user"] = this.formataUsuario(this.txtUsuario.Text.Trim());
                Response.Redirect("frmMain.aspx");
            }
            catch (Exception ex)
            {
                apresentarMensagem(ex.Message);
            }        
        }

        private string formataUsuario(string usuario)
        {
            
            if (usuario.IndexOf('\\') > -1)
            {
                usuario = usuario.Split('\\')[1];
            }
            return usuario.ToLower();
        }

        private bool usuarioAutenticado(string dominio, string usuario, string senha)
        {
            bool logou = false;
            try
            {
                if (!string.IsNullOrEmpty(dominio)) 
                    usuario = dominio + "\\" + usuario;
                DirectoryEntry entrada = new DirectoryEntry(ConfigurationManager.AppSettings["DirectoryEntry"], usuario.Trim(), senha.Trim());
                string resultado = entrada.Name;
                logou = true;
            }
            catch (Exception ex)
            {
                logou = false;
            }
            return logou;
        }

        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
            if (Request.QueryString.Get("loopback") != "1")
                this.Page.ClientScript.RegisterStartupScript(this.GetType(), "posicionar", "posicionar();", true);
        }

        protected override void preencherGrid()
        {
            throw new NotImplementedException();
        }

        protected override void preencherGrid(string sortExpression)
        {
            throw new NotImplementedException();
        }
    }
}
